package com.ggh.jinjilive.views.live.v2;

import android.content.Context;
import android.view.SurfaceView;
import android.view.TextureView;

import com.tencent.live2.V2TXLiveDef;
import com.tencent.live2.V2TXLivePlayerObserver;
import com.tencent.rtmp.ui.TXCloudVideoView;

public abstract class V2PULLLiveRoom {

    /**
     * 获取 MLVBLiveRoom 单例对象
     *
     * @param context  Android 上下文，内部会转为 ApplicationContext 用于系统 API 调用
     * @return MLVBLiveRoom 实例
     */
    public static V2PULLLiveRoom sharedInstance(Context context) {
        return V2PULLLiveRoomImpl.sharedInstance(context);
    }

    /**
     * 销毁 MLVBLiveRoom 单例对象
     *
     * @note 销毁实例后，外部缓存的 MLVBLiveRoom 实例不能再使用，需要重新调用获取新实例
     */
    public static void destroySharedInstance() {
        V2PULLLiveRoomImpl.destroySharedInstance();

    }

    /**
     * 设置播放器回调。通过设置回调，可以监听 V2TXLivePlayer 播放器的一些回调事件，包括播放器状态、播放音量回调、音视频首帧回调、统计数据、警告和错误信息等。
     */
    public abstract void setObserver();

    /**
     * 设置播放器渲染 View，该控件负责显示视频内容。
     * @param view
     * @return
     */
    public abstract int setRenderView(TXCloudVideoView view);
    /**
     * 设置播放器渲染 View，该控件负责显示视频内容。
     * @param view
     * @return
     */
    public abstract int setRenderView(SurfaceView view);

    /**
     * 设置播放器渲染 View，该控件负责显示视频内容。
     * @param view
     * @return
     */
    public abstract int setRenderView(TextureView view);

    /**
     * 开始播放音视频流。
     * @param url
     * @return
     */
    public abstract int startPlay(String url);

    /**
     * 停止播放音视频流。
     * @return
     */
    public abstract int stopPlay();

    /**
     * 播放器是否正在播放中。
     * 1：正在播放中。
     * 0：已经停止播放。
     * @return
     */
    public abstract int isPlaying();


    /**
     * 设置播放器画面的旋转角度。
     * @param rotation
     * V2TXLiveRotation0	不旋转。
     * V2TXLiveRotation90	顺时针旋转90度。
     * V2TXLiveRotation180	顺时针旋转180度。
     * V2TXLiveRotation270	顺时针旋转270度。
     * @return
     */
    public abstract int setRenderRotation(V2TXLiveDef.V2TXLiveRotation rotation);

    /**
     * 设置画面的填充模式。
     * @param mode
     * V2TXLiveFillModeFit	图像适应屏幕，保持画面完整，但如果图像宽高比不同于屏幕宽高比，会有黑边的存在。
     * V2TXLiveFillModeFill	图像铺满屏幕，不留黑边，如果图像宽高比不同于屏幕宽高比，部分画面内容会被裁剪掉。
     * @return
     */
    public abstract int setRenderFillMode(V2TXLiveDef.V2TXLiveFillMode mode);

    /**
     * 暂停播放器的视频流。
     * @return
     */
    public abstract int pauseVideo();

    /**
     * 恢复播放器的视频流。
     * @return
     */
    public abstract int resumeVideo();

    /**
     * public abstract int snapshot();
     * @return
     */
    public abstract int snapshot();


    /**
     * 设置视频自定义渲染回调。通过该方法，可以获取解码后的每一帧视频画面，进行自定义渲染处理，添加自定义显示效果。
     * @param enable
     * @param pixelFormat
     * @param bufferType
     * enable	Boolean	是否开启自定义渲染。默认值：false。
     * pixelFormat	V2TXLivePixelFormat	自定义渲染回调的视频像素格式。
     * bufferType	V2TXLiveBufferType	自定义渲染回调的视频数据格式。
     * @return
     *
     * V2TXLivePixelFormat 枚举值
     * 取值	说明
     * V2TXLivePixelFormatUnknown	未知。
     * V2TXLivePixelFormatI420	YUV420P I420。
     * V2TXLivePixelFormatTexture2D	OpenGL 2D 纹理。
     *
     * V2TXLiveBufferType 枚举值
     * 取值	说明
     * V2TXLiveBufferTypeUnknown	未知。
     * V2TXLiveBufferTypeByteBuffer	DirectBuffer，装载 I420 等 buffer，在 native 层使用。
     * V2TXLiveBufferTypeByteArray	byte[]，装载 I420 等 buffer，在 Java 层使用。
     * V2TXLiveBufferTypeTexture	直接操作纹理 ID，性能最好，画质损失最少。
     */
    public abstract int enableCustomRendering(boolean enable,V2TXLiveDef.V2TXLivePixelFormat pixelFormat,V2TXLiveDef.V2TXLiveBufferType bufferType);


    /**
     * 暂停播放器的音频流。
     * @return
     */
    public abstract int pauseAudio();

    /**
     * 恢复播放器的音频流。
     * @return
     */
    public abstract int resumeAudio();

    /**
     * 设置音量。
     * volume	int	音量大小，取值范围0 - 100，默认值：100。
     * @param volume
     * @return
     */
    public abstract int setPlayoutVolume(int volume);

    /**
     * 启用播放音量大小提示。
     * @param intervalMs
     * @return
     */
    public abstract int enableVolumeEvaluation(int intervalMs);

    /**
     * 设置播放器缓存自动调整的最小和最大时间 ( 单位：秒 )。
     * @param minTime
     * @param maxTime
     * @return
     */
    public abstract int setCacheParams(float minTime, float maxTime);

    /**
     * 是否显示播放器状态信息的调试浮层。
     * @param isShow
     */
    public abstract void showDebugView(boolean isShow);
}
